package com.michael.leetcode;

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

import java.util.ArrayList;

@Slf4j
public class Tictactoe_1275 {

    /*1275. 找出井字棋的获胜者
    井字棋 是由两个玩家 A 和 B 在 3 x 3 的棋盘上进行的游戏。井字棋游戏的规则如下：
    玩家轮流将棋子放在空方格 (' ') 上。第一个玩家 A 总是用 'X' 作为棋子，而第二个玩家 B 总是用 'O' 作为棋子。'X' 和 'O' 只能放在空方格中，而不能放在已经被占用的方格上。
    只要有 3 个相同的（非空）棋子排成一条直线（行、列、对角线）时，游戏结束。如果所有方块都放满棋子（不为空），游戏也会结束。游戏结束后，棋子无法再进行任何移动。
    给你一个数组 moves，其中 moves[i] = [rowi, coli] 表示第 i 次移动在 grid[rowi][coli]。如果游戏存在获胜者（A 或 B），就返回该游戏的获胜者；如果游戏以平局结束，则返回 "Draw"；如果仍会有行动（游戏未结束），则返回 "Pending"。
    你可以假设 moves 都 有效（遵循 井字棋 规则），网格最初是空的，A 将先行动。

    示例 1：
    输入：moves = [[0,0],[2,0],[1,1],[2,1],[2,2]]
    输出："A"
    解释："A" 获胜，他总是先走。

    示例 2：
    输入：moves = [[0,0],[1,1],[0,1],[0,2],[1,0],[2,0]]
    输出："B"
    解释："B" 获胜。

    示例 3：
    输入：moves = [[0,0],[1,1],[2,0],[1,0],[1,2],[2,1],[0,1],[0,2],[2,2]]
    输出："Draw"
    解释：由于没有办法再行动，游戏以平局结束。

    提示：
        1 <= moves.length <= 9
        moves[i].length == 2
        0 <= moves[i][j] <= 2
        moves 里没有重复的元素。
        moves 遵循井字棋的规则。*/
    public String tictactoe(int[][] moves) {
        int k = moves.length - 1;
        int[] a3 = moves[k];
        int i = 0;
        if (k % 2 != 0) {
            i = 1;
        }
        while (i < k) {
            int[] ai = moves[i];
            int j = i + 2;
            while (j < k) {
                int[] aj = moves[j];
                if ((a3[0] == ai[0] && ai[0] == aj[0])
                        || (a3[1] == ai[1] && ai[1] == aj[1])
                        || (a3[0] + a3[1] == 2 && ai[0] + ai[1] == 2 && aj[0] + aj[1] == 2)
                        || (a3[0] == a3[1] && ai[0] == ai[1] && aj[0] == aj[1])
                ) {
                    return k % 2 == 0 ? "A" : "B";
                }

                j = j + 2;
            }
            i = i + 2;
        }

        return k < 8 ? "Pending" : "Draw";
    }


    @Test
    public void test(){
        int [][] moves = {{1,2},{2,1},{1,0},{0,0},{0,1},{2,0},{1,1}};
        String tictactoe = tictactoe(moves);
        log.info(tictactoe );
    }
}
